package com.tedu.api.ee;

import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
 * 流--传输数据---传输数据过程绝不能出错【处理手段】
 * 标准流结合异常----标准IO
 *
 * 异常
 * Java面向对象语言，程序中所出现的所有错误，定义为对象【处理对应错误】
 *
 *Throwable顶级异常超类
 *
 * Exception异常：描述程序级别的错误---有解决方案
 *              编译期：RunTimeException异常的表示类
 *                    FileOutputStream创建对象---波浪线---抛出方法之外
 *              检查异常：通常都是编辑器检查处理：程序直接报错，抛出
 *              解决方案：①捕获异常（*）
 *                      ②抛出异常---抛出方法之外---打印控制台
 *              运行期：控制台直接显示异常对象【异常对象名字、产生原因】
 *              非检查异常：控制台输出异常对象名称 ，RunTimeException异常表示
 *
 *              最后了解【throw与throws----RunTimeException】
 * Error错误：描述系统级别的错误---出现---程序宕机
 *           非常低--->递归：自己调自己【方法】--->
 */
public class EE {
    /**
     * Error 错误---程序严重错误
     * 模拟：方法调方法---栈溢出错误
     * StackOverflowError栈溢出错误
     * ----程序宕机----后台：9亿账号
     * while（true）{
     *     拼接字符串对象
     * }
     */
    public static void method(){
        method();
    }
    @Test
    public void testError(){
        EE.method();
    }

    /**
     * Exception异常：检查异常【出现编译期】---代码波浪线
     *              两种处理手段：①捕获异常
     *                        语法：try{
     *                            怀疑代码可能有异常或者提示异常
     *                        }catch(小异常名字 e){
     *                            e.printStacktrace();打印异常信息
     *                        }catch(小异常名字 e){
     *                            e.printStacktrace();打印异常信息
     *                        }catch(小异常名字 e){Exception
     *                            e.printStacktrace();打印异常信息
     *                        }finally{
     *                            一定执行代码块
     *                        }
     *                        快捷键：ctrl+alt+t
     *
     *                         ②抛出异常  throws  异常名字【并未解决】
     *                    考试题：throw与throws的区别
     *                    异常关键字：throw
     *                             throws
     *              非检查异常【出现运行期】---代码无报错---控制台
     *-------------------------
     * 异常：FileOutputStream   文件不存在异常
     * 产生原因：路径写错、文件名写错
     * 异常：NullPointerException  空指针异常
     * 产生原因：获取字符串为空，数组：值为空，集合：元素为空【存在null值】
     * 异常：StringIndexOutOfBoundsException  字符串下标越界异常
     * 产生原因：字符串下标没有对应字符
     * 异常：NumberFormatException 数字转换异常
     * 产生原因：字符串不是正确的类型
     */
    @Test
    public void testException() throws FileNotFoundException {
        //检查异常【出现编译期】---代码报波浪线
        //FileOutputStream fis=new FileOutputStream("");
        //非检查异常【出现运行期】---控制台
        try {
            String str="a";
            str.length();
            str.charAt(1);
            Integer.parseInt(str);//解析字符串---转换为对应类型
        } catch (StringIndexOutOfBoundsException e){
            e.printStackTrace();//打印异常对象的信息
            System.out.println("字符串小异常：下标越界异常~~");
        } catch (NumberFormatException e) {
            e.printStackTrace();  //打印异常信息
            System.out.println("字符串小异常~~");
        } catch (Exception e){
            e.printStackTrace();
            System.out.println("大异常~~");
        } finally {
            System.out.println("一定执行代码块~");
        }
    }

    /**
     * 作业1：写出5个【非检查】异常的代码
     * 提示：查API---java.long.异常
     *      字符串、包装类、集合IO流
     */
    @Test
    public void testHomeWork1(){

                  //1.
                  String st=null;
                  int length=st.length();
                  System.out.println("运行1"+length);
                  //2.
                  String st1="哈阳";
                  int index=20;
                  char hy=st1.charAt(index);
                  System.out.println("运行2："+hy);
                  //3.
                  String st2="1,2,3";
                  int it=Integer.parseInt(st2);
                  System.out.println("运行3："+it);
                  //4.
                  int[] sz={11,12,13};
                  int index1=16;
                  int value=sz[index1];

                  //5.
                  int num=100;
                  int num1=200;
                  int result=num/num1;



}
}
